package com.telit.firecommand.service;


import com.telit.android.dto.SimpleFireAlarmDTO;
import com.telit.common.dto.LongitudeAndLatitudeDTO;
import com.telit.common.entity.PageData;
import com.telit.firecommand.dto.*;
import com.telit.firecommand.entity.CommCameraInfo;
import com.telit.firecommand.entity.CommFireAlarm;
import com.telit.firecommand.vo.ResourceSimpLevelMinVO;

import java.util.List;
import java.util.Map;

/**
 * @author zhouyu
 * @description 火情查询接口
 */
public interface FireQueryService {

    /**
     * 查询火情是否存在
     * @param fireId 火情id
     * @return
     */
    boolean queryIsExist(Long fireId);


    /**
     *
     * 根据火情id查询获取明细
     * @param fireId
     * @return
     */
    FireDetailDTO queryDetailById(Long fireId);

    /**
     * 根据获取id和护林员id查询任务反馈
     * @param fireId
     * @param personId
     * @return
     */
    List<TaskFeedbackInfoDTO> queryTaskFeedbackInfo(Long fireId, Long personId);

    /**
     * 条件查询火情列表
     * @param status
     * @param startTime
     * @param endTime
     * @param districtCode
     * @param source
     * @param isEmergencyDrill
     * @param page
     * @param rows
     * @return
     */
    Object queryAllFireByCondition(String status, String startTime, String endTime, String districtCode, String source, String isEmergencyDrill, String fireLevel,Integer page, Integer rows);

    /**
     * 查询电话接警
     * @return
     */
    PageData<Object> queryTelephoneAlarm();

    /**
     * 查询电话接警
     */
    PageData<Object> queryTelephoneAlarmByDistrictCode(String districtCode);

    /**
     * 查询所有状态火情数量
     * @return
     */
    Map<Object,Object> queryAllStatusNumber(String districtCode);

    /**
     * 首页左下角火情信息
     * @return
     */
    Object queryLeftFireInfo(String districtCode);

    /**
     * 根据id查询火情基本信息
     * @param fireId
     * @return
     */
    CommFireAlarm queryById(Long fireId);

    /**
     * 查询推送火情
     * @param fireId
     * @return
     */
    CommFireAlarm querySendFireById(Long fireId);

    /**
     * 根据经纬度查询未完成处置火情
     * @param longitude
     * @param latitude
     * @return
     */
    List<CommFireAlarm> queryNotFinishFireByLongitudeAndLatitude(String longitude, String latitude,String districtCode);

    /**
     * 根据时间查询电话接警
     * @param startTime
     * @param endTime
     * @param page
     * @param rows
     * @return
     */
    PageData<Object> queryAllTelephoneAlarm(String startTime, String endTime, Integer page, Integer rows,String  districtCode);

    /**
     * 根据年份统计历史火情信息
     *
     * @param year
     *
     * @return
     */
    HistoryFireCountDTO queryCountHistoryFireByYear(String year, String districtCode, String startTime,
                                                    String endTime, String fireLevel, String resource);

    /**
     * 根据火情id查询历史火情数据
     * @param fireId
     * @return
     */
    HistoryFireDTO queryHisFireDetailById(Long fireId);

    /**
     * 根据火情id查询多媒体资源
     *
     * @param fireId
     *
     * @return
     */
    Map<String, List<MultimediaDTO>> queryMediaById(Long fireId);

    /**
     * 只查询火情上报时候的多媒体信息
     *
     * @param fireId 火情id
     *
     * @return Map<String, List < MultimediaDTO>>
     */
    Map<String, List<MultimediaDTO>> queryOnlyAddMediaById(Long fireId);

    /**
     * 根据火情id查询应急演练明细
     *
     * @param fireId
     *
     * @return
     */
    EmergencyDrillDetailDTO queryEmergencyPlanDetailById(Long fireId);

    /**
     * 查询所有火情来源
     * @return
     */
    List<Map<Object, Object>> queryAllSource();

    /**
     * 查询未处置完成火情
     * @return
     * @param fireId
     */
    List<CommFireAlarm> queryIncompleteDisposalFire(Long fireId, String  districtCode);

    /**
     * 查询历史火情
     *
     * @param startTime
     * @param endTime
     * @param districtCode
     * @param fireLevel
     * @param page
     * @param rows
     *
     * @return
     */
    Object queryAllHistoryFire(String startTime, String endTime, String districtCode, String fireLevel, String resource,
                               Integer page, Integer rows);

    /**
     * 查询火情地址详情信息
     * @return
     */
    SimpleFireAlarmDTO queryAddress(Long fireId);

	/**
     * 查询历史应急演练
     * @param startTime
     * @param endTime
     * @param districtCode
     * @param page
     * @param rows
     * @return
     */
    Object queryAllHistoryEmergencyFire(String startTime, String endTime, String districtCode, Integer page, Integer rows);

    /**
     * app端火情条件查询
     * @param startTime
     * @param endTime
     * @param page
     * @param rows
     * @return
     */
    Object appQueryAllFireByCondition(String startTime, String endTime, Integer page, Integer rows);

    /**
     * 根据年份统计历史应急演练火情信息
     * @param year
     * @return
     */
    List<DistrictFireCountDTO> queryCountHistoryEmergencyFireByYear(String year);

//    /**
//     * 查询用户未读下级上报火情
//      * @param userId
//     * @return
//     */
//    List<CommFireAlarm> queryUnReadReportFire(Long userId);

    /**
     * 查询用户未读本级上报火情
     * @param userId
     * @return
     */
    List<CommFireAlarm> queryUnReadCurrentLevelFire(Long userId);

    /**
     * 查询用户未读下级上报火情
     * @param userId
     * @return
     */
    boolean queryHasUnReadReportFire(Long userId);

    /**
     * 查询用户未读本级上报火情
     * @param userId
     * @return
     */
    boolean queryHasUnReadCurrentLevelFire(Long userId);

    /**
     * 查询火情经纬度
     * @param fireId
     * @return
     */
    LongitudeAndLatitudeDTO queryLongitudeAndLatitude(Long fireId);

    Object queryCameraFindFire(Integer page, Integer rows, Integer hasJudgment, String startTime,String endTime,String districtCode);

    FireCountDTO queryFireCount(String flag, String districtCode);

    List<VerifyCameraCountDTO> queryCountCameraFindFire();

    List<DistrictFireCountDTO> queryFireCountByDistrict(String flag, String districtCode);

    /**
     * 首页 条件查询火情明细
     * @param flag
     * @param districtName
     * @param fireLevel
     * @return
     */
    List<CommFireAlarm> queryFireDetailByCondition(String flag, String districtName, String districtCode, String fireLevel);

    /**
     * 根据火情id查询监控信息
     * @param fireId
     * @return
     */
    CommCameraInfo queryCameraByFireId(Long fireId);

    /**
     * 条件查询历史火情明细
     * @param flag
     * @param districtName
     * @param fireLevel
     * @return
     */
    List<CommFireAlarm> queryHistoryFireDetailByCondition(String flag, String districtName, String fireLevel);

    Map queryAllFireStatusCount(String districtCode);


    /**
     * 监控发现火情判重
     * @param cameraId
     */
    void verifyCameraFindSameFire(Long cameraId, double lit, double lat);

    /**
     * app端调用查询火情接口
     * @param status
     * @param startTime
     * @param endTime
     * @param districtCode
     * @param page
     * @param rows
     * @return
     */
    Object queryAllFireForAppByCondition(String status, String startTime, String endTime, String districtCode, String source, String isEmergencyDrill, String fireLevel, Integer page, Integer rows);

    List<CommFireAlarm> queryIncompleteDisposalFireByPoint(String firePoint);

    PageData<Object> queryAllSampleLibrary(String startTime, String endTime, String districtCode, Integer judgement, int page, int rows);

    List<LonAndLatDTO> queryUnfinishedFireByDay(String day, String districtCode);

    List<CommFireAlarm> queryListByFireIds(List<Long> fireIdList);

    /**
     * 报警统计接口
     *
     * @return  List<Map>
     */
    List<Map> queryFireCountVO(String districtCode);


    /**
     * 地图显示--->根据范围搜索火点经纬度 适用于区县级别
     *
     * @return  List<Map>
     */
    List<Map> fireSimpListByViewSearch(FireSimpListByViewSearchDTO dto);

    /**
     * 地图显示--->地图资源(包括视频，资源等)统计数量
     *
     * @return  List<Map>
     */
    List<Map> fireResourceSimpListByViewSearch(FireSimpListByViewSearchDTO dto);

    /**
     * 地图显示---->地图最小一级显示火点接口
     *
     * @return List<ResourceSimpLevelMinVO>
     */
    List<ResourceSimpLevelMinVO> fireListBySearchLevelMin(FireSimpListByViewSearchDTO dto);

    /**
     * 地图最小一级显示资源(包括视频，资源等)
     *
     * @return List<ResourceSimpLevelMinVO>
     */
    List<ResourceSimpLevelMinVO> fireListBySearchResourceLevelMin(FireSimpListByViewSearchDTO dto);

    /**
     * 查询火情列表
     */
    PageData<List<CommFireAlarm>> queryAllFireByCondition(FireQueryListDTO fireQueryListDTO);

    Map<String, Object> queryCount(String districtCode);

}
